package com.itheima.socket.tcp.demo07;

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

/**
 * 客户端键盘录入数据，发送到服务端；服务器端接收到数据在控制台输出
 */
public class ClientDemo01 {

    /**
     * 分析：键盘录入的数据是字符串， 而我们通过socket对象获取到的输出流是一个字节输出流，字节输出流没有一次写一个字符串的方法
     * 怎么写数据呢？
     *
     * 1. 把字符串转换成字节数组
     * 2. 把字节输入流转换成字符输出流：OutputStreamWriter ， 我们一般情况下使用的都是高效的字符输出流，因此我们最终选择的是
     * BufferedWriter
     *
     */
    public static void main(String[] args) throws Exception {

        // 1. 创建Socket对象
        Socket socket = new Socket(InetAddress.getByName("169.254.106.206") , 8080) ;

        // 2. 获取输出流对象(获取到的是字节输出流)
        OutputStream outputStream = socket.getOutputStream();

        // 3. 把字节输出流转换成字符输出流 ， 并且使用高效的流对象进行封装
//        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream) ;
//        BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter) ;
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)) ;

        while(true) {

            // 4. 接收键盘录入数据              (循环)
            Scanner sc = new Scanner(System.in) ;
            String next = sc.next();

            if(next.equals("886")) {

                bufferedWriter.write(next);
                bufferedWriter.newLine();
                bufferedWriter.flush();

                break;
            }

            // 5. 把键盘录入的数据写入到服务端
            bufferedWriter.write(next);
            bufferedWriter.newLine();
            bufferedWriter.flush();

        }

    }

}
